/* eslint-disable no-undef */
/**
 * Created by yangchen on 2019/4/8
 * */

/**
 * 构造开发平台接口入参
 * @param params 包含popup参数及nation参数
 * @returns {*}
 */
const initArg4Open = params => {
  let inputData = {
    data: {
      balance: {},
      cash: {},
      profit: {}
    }, // 填报数据 通过saas node层获取
    institution:
      window.renderData.accBook.institutionCode === '1' ? '2007' : '2013', // 会计制度 2007(一般纳税人) | 2013(小企业)
    city: params.cityName || '', // 城市拼音
    sheetType: params.type || '', // 报表类型 balance | cash | profit | hsqj | hsqj-samll | zzs
    isYearReport: false // 是否为年报
  };
  let taxInfo = {
    institution: '2013', // 国税对应制度 2007 | 2013
    nsrsbh: '', // 纳税人申报号
    nsrmc: '', // 纳税人名称（纳税公司）
    bsrq: getCurrentDate(), // 报送日期（默认当前日期）
    skssqq: '', // 税款所属期起
    skssqz: '' // 税款所属期止
  };
  let outPutType = 'json'; // 默认json,可选填 xml/tax/excel
  let openParams = {
    inputData: inputData,
    taxInfo: taxInfo,
    outPutType: outPutType,
    isZip: false // 是否压缩
  };

  // 重新请求token标识  token在saas node层做了缓存 当标识为true 重新请求获取token接口
  openParams.tokenInvalid = params.isAgain;

  if (params.taxInfo) {
    Object.assign(openParams.taxInfo, params.taxInfo);
    if (params.taxInfo.outPutType) {
      openParams.outPutType = params.taxInfo.outPutType;
      openParams.isZip = !!params.taxInfo.isZip;
      delete openParams.taxInfo.outPutType;
      delete openParams.taxInfo.isZip;
    }
    // zip中包含的文件数量为三时 设置sheetType为all 三大报表压缩至一个文件
    if (
      openParams.isZip
      && params.taxInfo.filesNum
      && params.taxInfo.filesNum === 3
    ) {
      openParams.inputData.sheetType = 'all';
    }
    // 以用户选择的国地税执行准则为准
    params.ins && (openParams.taxInfo.institution = params.ins);
  }

  // 如果nation未获取税款起止参数 则以popup给出起止周期为准
  if (!openParams.taxInfo.skssqq) {
    openParams.taxInfo.skssqq = moment(params.startTime)
      .startOf('month')
      .format('YYYY-MM-DD');
  }
  if (!openParams.taxInfo.skssqz) {
    openParams.taxInfo.skssqz = moment(params.endTime)
      .endOf('month')
      .format('YYYY-MM-DD');
  }

  openParams.inputData.isYearReport = isYearReport(
    openParams.taxInfo.skssqq,
    openParams.taxInfo.skssqz,
    openParams.inputData.sheetType
  );

  return openParams;
};

/**
 * 判断是否为年报
 * @param startTime
 * @param endTime
 * @param sheetType
 * @returns {boolean}
 */
const isYearReport = (startTime = '', endTime = '', sheetType = 'balance') => {
  let year = parseInt(startTime.substr(0, 4));
  let beginPeriod = Number.parseInt(startTime.substr(5));
  let endPeriod = Number.parseInt(endTime.substr(5));
  // 开始时间为1月和结束时间为12月且年份比当前年份小1且为现金流量表或利润表 则是年报 其他为季月报
  // 资产负债表只有年月报 年报数据跟12月份数据是一样的
  const isYearReportBoolean = endPeriod === 12
    && beginPeriod === 1
    && year === new Date().getFullYear() - 1
    && ['cash', 'profit'].includes(sheetType);
  return isYearReportBoolean;
};

/**
 * 获取当前时间
 * @returns {string}
 */
const getCurrentDate = () => {
  let now = new Date();
  let year = now.getFullYear();
  let month = now.getMonth() + 1 < 10 ? '0' + (now.getMonth() + 1) : now.getMonth() + 1;
  let day = now.getDate();
  day = day < 10 ? '0' + day : day;
  return `${year}-${month}-${day}`;
};

const getPeriod = () => {
  let accBook = window.renderData.accBook;
  let end = Number.parseInt(window.renderData.period);
  let start = null;
  if (accBook.taxReportType === 'QUARTER') {
    start = end - 2;
  } else {
    start = end;
  }
  return {
    curYear: window.renderData.year,
    start: start,
    end: end,
    createDate: accBook.createDate.substr(0, 4)
  };
};

/**
 * 构造接口参数
 * @param params
 * @param saasParams
 * @returns {*}
 */
const initArg = (params, saasParams) => {
  return Object.assign(saasParams, { openParams: initArg4Open(params) });
};

// ajax 基础请求数据
const requestBase = {
  companyId: window.renderData.accBook.companyId,
  accountBookId: window.renderData.accBook.accountBookId,
  _csrf: window.renderData.requestBase._csrf
};

/**
 * 封装使用ajax post请求
 * @param {*} url
 * @param {*} data
 * @param {*} method
 */
const $ajax = (url, data) => {
  return $.ajax({
    url,
    method: 'POST',
    data: Object.assign(data, requestBase)
  });
};

export {
  isYearReport, initArg, getPeriod, $ajax
};
